package basic.study.leetcode;

import java.util.Arrays;

/**
 * @ClassName Mid1371
 * @Description
 * @Company inspur
 * @Author Kevin
 * @Date 2020/5/20 16:39
 * @Version 1.0
 */
//                作者：LeetCode-Solution
//                链接：https://leetcode-cn.com/problems/find-the-longest-substring-containing-vowels-in-even-counts/solution/mei-ge-yuan-yin-bao-han-ou-shu-ci-de-zui-chang-z-2/
//                来源：力扣（LeetCode）
//                著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
public class Mid1371 {
    class Solution {
        //这里的元音偶数次不是之前出现的偶数次，而是作差得前缀是偶数次，由（奇数-奇数，偶数-偶数得）
        public int findTheLongestSubstring(String s) {
            int n = s.length();
            int [] pos = new int[ 1 << 5];
            Arrays.fill(pos, -1);
            int ans = 0, status = 0;
            pos[0] = 0;
            for (int i = 0; i < n; i++) {
                char ch = s.charAt(i);
                if (ch == 'a') {
                    status ^= (1 << 0);
                } else if (ch == 'e') {
                    status ^= (1 << 1);
                } else if (ch == 'i') {
                    status ^= (1 << 2);
                } else if (ch == 'o') {
                    status ^= (1 << 3);
                } else if (ch == 'u') {
                    status ^= (1 << 4);
                }
                //pos[status]此时不为-1，为第一次状态出现位置
                if (pos[status] >= 0) {
                    //i + 1 - pos[status],目前长度
                    ans = Math.max(ans, i + 1 - pos[status]);
                } else {
                    //此状态第一次出现时的位置
                    pos[status] = i + 1;
                }
            }

            return ans;
        }
    }
}
